<?php
/* 角色控制器, 处理后台管理端角色相关的请求 */

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;

class SysRoleController extends HomeController
{
    
    //获取角色列表
    public function list(Request $request)
    {
        try {
            // 分页参数
            $page = $request->input('page', 1);
            $limit = $request->input('limit', 10);

            // 从数据库中获取角色列表
            $roles = DB::table('sys_role')->offset(($page - 1) * $limit)->limit($limit)->get();
            // 统计总记录数
            $total = DB::table('sys_role')->count();

            return response()->json([
                'code' => HTTP_OK,
                'message' => '获取角色列表成功',
                'data' => $roles,
                'count' => $total,
            ]);
        } catch (\Exception $e) {
            // 记录错误日志
            Log::error('获取角色列表失败: ' . $e->getMessage());
            return response()->json([
                'code' => HTTP_ERROR,
                'message' => '获取角色列表失败',
                'data' => null
            ]);
        }
    }


    /**
     * 调用该接口可添加一个新的角色
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function insert(Request $request) 
    {
        $list = array();
        $name = $request->input('name'); //角色名称
        $memo = $request->input('memo') ? : '';
        $menus = $request->input('menus'); //此角色所能拥有的菜单和动作权限

        //json_decode 把json字符串转换为数组
        $menus_arr = json_decode($menus, true);

        //角色名称不能重复
        $exists = DB::table('sys_role')->where('name', $name)->exists();
        if ($exists) {
            //角色名称重复了
            $list['code'] = HTTP_ERROR;
            $list['message'] = '角色名称已经存在';
            return response()->json($list);
        }

        //添加角色，把角色拥有的菜单一并写入
        $role_arr = array();
        $role_arr['name'] = $name;
        $role_arr['memo'] = $memo;
        $new_role_id = DB::table('sys_role')->insertGetId($role_arr);
        if ($new_role_id) {
            //角色拥有菜单权限写入 sys_role_menu表
            $rolemenu_arr = [];
            foreach ($menus_arr as $mkey => $mval) {
                $rolemenu_arr[$mkey]['role_id'] = $new_role_id;
                $rolemenu_arr[$mkey]['menu_id'] = $mval['menu_id'];
                $rolemenu_arr[$mkey]['action'] = $mval['actions'] ? : '';
            }
            DB::table('sys_role_menu')->insert($rolemenu_arr);
            //返回结果
            $list['code'] = HTTP_OK;
            $list['message'] = '操作成功';
            return response()->json($list);
        } else {
            //插入失败
            $list['code'] = 0;
            $list['message'] = '添加角色失败';
            return response()->json($list);
        }
        return response()->json($list);
    }





    

}
